# 死循环
# lst = [1, 2, 3, 4]
# for i in lst:
#     lst.append(5)
# print(lst)

# 列表的删除
# lst = [1, 2, 3, 4]
# for i in lst:
#     lst.pop()
# print(lst)      # 该方法只能删除3、4两个元素
# 分析：当循环元素1时pop删除4；同理当循环元素2时pop删除3，此时没有可循环元素，所以循环结束。
# lst = [1, 2, 3, 4]
# for i in lst:
#     lst.pop(0)
# print(lst)      # 该方法只能删除1、2两个元素
# 分析：当循环元素1时pop删除1，此时由于1的删除，后面的元素会自动补位，变成[2,3,4]
# 所以新的循环开始时，会遍历元素3，同理当循环元素3时pop删除2，自动补位[3,4]，
# 此时没有可循环元素，所以循环结束。
# lst = [1, 2, 3, 4]
# for i in lst:
#     lst.remove(i)
# print(lst)      # 该方法只能删除1、3两个元素
# 同上一样，元素会自动补位。
# 由此可知，每次循环总是受到遍历元素规则的干扰，所以突破点就是不再遍历列表本身
# lst = [1, 2, 3, 4]
# for i in range(len(lst)):
#     lst.pop(0)
# print(lst)
# 此时循环就发挥出作用，只是简单的根据列表的长度来循环执行pop即可。
# 另一种方式，增加一个替身，时遍历时元素不改变
# lst = [1, 2, 3, 4]
# lst1 = lst.copy()
# for i in lst1:
#     lst.pop(0)
# print(lst)

# 删除字典
# dic = dict.fromkeys('123456', 1)
# for i in dic:
#     dic.pop(i)
# print(dic)        # 运行报错，字典在遍历时不可改变长度，不能删和加（底层是无序的原因）
# 同上，用替身
# dic = dict.fromkeys('123456', 1)
# dic1 = dic.copy()
# for i in dic1:
#     dic.pop(i)
# print(dic)
# 集合字典在遍历时都不能改变长度